<?xml version="1.0" encoding="utf-8" ?>
<!--

XSD Schema for Actipro SyntaxEditor XML Language Definition 4.0
Copyright (c) 2001-2008 Actipro Software LLC.  All rights reserved.
http://www.ActiproSoftware.com/Products/DotNet/

-->
<xs:schema id="LanguageDefinition" targetNamespace="http://ActiproSoftware/SyntaxEditor/4.0/LanguageDefinition" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://ActiproSoftware/SyntaxEditor/4.0/LanguageDefinition" elementFormDefault="qualified">
	<!-- -->
	<xs:simpleType name="Boolean">
		<xs:restriction base="xs:string">
			<xs:enumeration value="True" />
			<xs:enumeration value="False" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="CaseSensitivity">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Sensitive" />
			<xs:enumeration value="Insensitive" />
			<xs:enumeration value="AutoCorrect" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="DefaultableBoolean">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Default" />
			<xs:enumeration value="True" />
			<xs:enumeration value="False" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="HighlightingStyleBorderCornerStyle">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Square" />
			<xs:enumeration value="SinglePixelRounded" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="HighlightingStyleLineStyle">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Default" />
			<xs:enumeration value="Solid" />
			<xs:enumeration value="DashDot" />
			<xs:enumeration value="Dot" />
			<xs:enumeration value="Dash" />
			<xs:enumeration value="Wave" />
			<xs:enumeration value="None" />
		</xs:restriction>
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="HighlightingStyleLineWeight">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Single" />
			<xs:enumeration value="Double" />
		</xs:restriction>
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="ModifierKeys">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Control" />
			<xs:enumeration value="Shift" />
			<xs:enumeration value="Alt" />
			<xs:enumeration value="ControlShift" />
			<xs:enumeration value="ControlAlt" />
			<xs:enumeration value="ShiftAlt" />
			<xs:enumeration value="ControlShiftAlt" />
			<xs:enumeration value="None" />
			<xs:enumeration value="AnyControl" />
			<xs:enumeration value="AnyShift" />
			<xs:enumeration value="AnyAlt" />
			<xs:enumeration value="AnyControlShift" />
			<xs:enumeration value="AnyControlAlt" />
			<xs:enumeration value="AnyShiftAlt" />
			<xs:enumeration value="Any" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="PatternGroupType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="StartScope" />
			<xs:enumeration value="EndScope" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:complexType name="ExplicitPatternGroup">
		<xs:sequence>
			<xs:element name="ExplicitPattern" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>A pattern within an explicit pattern group.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:attribute name="Value" type="xs:string" use="required" />
				</xs:complexType>
			</xs:element>
			<xs:element name="ExplicitPatterns" minOccurs="0">
				<xs:annotation>
					<xs:documentation>A set of patterns within an explicit pattern group, delimited by whitespace.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="TokenKey" type="xs:string" use="required" />
		<xs:attribute name="TokenID" type="xs:string" use="optional" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookBehind" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
		<xs:attribute name="StartBracket" type="xs:string" use="optional" />
		<xs:attribute name="EndBracket" type="xs:string" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ScopeExplicitPatternGroup">
		<xs:attribute name="Type" type="PatternGroupType" use="required" />
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="TokenKey" type="xs:string" use="required" />
		<xs:attribute name="TokenID" type="xs:string" use="optional" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookBehind" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:complexType name="RegexPatternGroup">
		<xs:sequence>
			<xs:element name="RegexPattern" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>A pattern within a regular expression pattern group.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:attribute name="Value" type="xs:string" use="required" />
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="TokenKey" type="xs:string" use="required" />
		<xs:attribute name="TokenID" type="xs:string" use="optional" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookBehind" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
		<xs:attribute name="StartBracket" type="xs:string" use="optional" />
		<xs:attribute name="EndBracket" type="xs:string" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ScopeRegexPatternGroup">
		<xs:attribute name="Type" type="PatternGroupType" use="optional" />
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="TokenKey" type="xs:string" use="required" />
		<xs:attribute name="TokenID" type="xs:string" use="optional" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookBehind" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:element name="SyntaxLanguage">
		<xs:annotation>
			<xs:documentation>The root element for a dynamic language XML definition.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Properties" minOccurs="0">
					<xs:annotation>
						<xs:documentation>A set of string-based properties that are assigned to the language.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:choice>
							<xs:element name="Property" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>A string-based property that is assigned to the language.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Value" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="Triggers" minOccurs="0">
					<xs:annotation>
						<xs:documentation>A set of triggers that fire when certain events occur.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:choice maxOccurs="unbounded">
							<xs:element name="AutoReplaceTrigger" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>A trigger that executes auto-replace functionality.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="AutoReplaceTriggerActivators">
											<xs:annotation>
												<xs:documentation>A set of characters that cause the trigger to fire.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:choice>
													<xs:element name="AutoReplaceTriggerActivator" maxOccurs="unbounded">
														<xs:annotation>
															<xs:documentation>A character that causes the trigger to fire.</xs:documentation>
														</xs:annotation>
														<xs:complexType>
															<xs:attribute name="Character" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="AutoReplaceTriggerValidStates" minOccurs="0">
											<xs:annotation>
												<xs:documentation>A set of the lexical states in which the trigger is valid.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:choice>
													<xs:element name="AutoReplaceTriggerValidState" maxOccurs="unbounded">
														<xs:annotation>
															<xs:documentation>A lexical state in which the trigger is valid.</xs:documentation>
														</xs:annotation>
														<xs:complexType>
															<xs:attribute name="State" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="Key" type="xs:string" use="required" />								
									<xs:attribute name="AllowGlobalLookup" type="Boolean" use="optional" />								
								</xs:complexType>
							</xs:element>
							<xs:element name="KeyPressTrigger" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>A trigger that executes when a key is pressed while in a certain lexical state.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="KeyPressTriggerValidStates" minOccurs="0">
											<xs:annotation>
												<xs:documentation>A set of the lexical states in which the trigger is valid.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:choice>
													<xs:element name="KeyPressTriggerValidState" maxOccurs="unbounded">
														<xs:annotation>
															<xs:documentation>A lexical state in which the trigger is valid.</xs:documentation>
														</xs:annotation>
														<xs:complexType>
															<xs:attribute name="State" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="Key" type="xs:string" use="required" />								
									<xs:attribute name="Character" type="xs:string" use="required" />								
									<xs:attribute name="AllowInReadOnlyMode" type="Boolean" use="optional" />								
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="Styles">
					<xs:annotation>
						<xs:documentation>A set of highlighting styles.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:choice>
							<xs:element name="Style" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>A highlighting style definition.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Name" type="xs:string" use="optional" />
									<xs:attribute name="ForeColor" type="xs:string" use="optional" />
									<xs:attribute name="BackColor" type="xs:string" use="optional" />
									<xs:attribute name="Bold" type="DefaultableBoolean" use="optional" />
									<xs:attribute name="BorderColor" type="xs:string" use="optional" />
									<xs:attribute name="BorderCornerStyle" type="HighlightingStyleBorderCornerStyle" use="optional" />
									<xs:attribute name="BorderStyle" type="HighlightingStyleLineStyle" use="optional" />
									<xs:attribute name="CursorName" type="xs:string" use="optional" />
									<xs:attribute name="CursorModifierKeys" type="ModifierKeys" use="optional" />
									<xs:attribute name="FontFamilyName" type="xs:string" use="optional" />
									<xs:attribute name="FontSize" type="xs:string" use="optional" />
									<xs:attribute name="Italic" type="DefaultableBoolean" use="optional" />
									<xs:attribute name="StrikeOutColor" type="xs:string" use="optional" />
									<xs:attribute name="StrikeOutStyle" type="HighlightingStyleLineStyle" use="optional" />
									<xs:attribute name="StrikeOutWeight" type="HighlightingStyleLineWeight" use="optional" />
									<xs:attribute name="UnderlineColor" type="xs:string" use="optional" />
									<xs:attribute name="UnderlineStyle" type="HighlightingStyleLineStyle" use="optional" />
									<xs:attribute name="UnderlineWeight" type="HighlightingStyleLineWeight" use="optional" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="Macros" minOccurs="0">
					<xs:annotation>
						<xs:documentation>A set of lexical macros.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:choice>
							<xs:element name="Macro" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>A macro definition.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Value" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="States">
					<xs:annotation>
						<xs:documentation>A set of lexical states within the language.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:choice>
							<xs:element name="State" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>A lexical state definition.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Scopes" minOccurs="0">
											<xs:annotation>
												<xs:documentation>A set of lexical scopes that start and end the lexical state.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:choice maxOccurs="unbounded">
													<xs:element name="Scope">
														<xs:annotation>
															<xs:documentation>A lexical scope definition.</xs:documentation>
														</xs:annotation>
														<xs:complexType>
															<xs:choice maxOccurs="unbounded">
																<xs:element name="ExplicitPatternGroup" type="ScopeExplicitPatternGroup">
																	<xs:annotation>
																		<xs:documentation>An explicit pattern group the defines the lexical scope pattern.</xs:documentation>
																	</xs:annotation>																	
																</xs:element>
																<xs:element name="RegexPatternGroup" type="ScopeRegexPatternGroup">
																	<xs:annotation>
																		<xs:documentation>An regular expression pattern group the defines the lexical scope pattern.</xs:documentation>
																	</xs:annotation>																	
																</xs:element>
																<xs:element name="StateTransition">
																	<xs:annotation>
																		<xs:documentation>A state transition to another language that occurs when the scope is matched.</xs:documentation>
																	</xs:annotation>																	
																	<xs:complexType>
																		<xs:choice>
																			<xs:element name="ExplicitPatternGroup" type="ExplicitPatternGroup">
																				<xs:annotation>
																					<xs:documentation>An explicit pattern group that defines patterns that will exit the child language when matched.</xs:documentation>
																				</xs:annotation>																	
																			</xs:element>
																			<xs:element name="RegexPatternGroup" type="RegexPatternGroup">
																				<xs:annotation>
																					<xs:documentation>A regular expression pattern group that defines patterns that will exit the child language when matched.</xs:documentation>
																				</xs:annotation>																	
																			</xs:element>
																		</xs:choice>
																		<xs:attribute name="Filename" type="xs:string" use="required" />
																		<xs:attribute name="State" type="xs:string" use="optional" />
																		<xs:attribute name="ChildLanguageBackColor" type="xs:string" use="optional" />
																	</xs:complexType>
																</xs:element>
															</xs:choice>
															<xs:attribute name="BracketHighlight" type="Boolean" use="optional" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="PatternGroups" minOccurs="0">
											<xs:annotation>
												<xs:documentation>A set of lexical pattern groups that define the patterns recognized in the lexical state.</xs:documentation>
											</xs:annotation>																	
											<xs:complexType>
												<xs:choice maxOccurs="unbounded">
													<xs:element name="ExplicitPatternGroup" type="ExplicitPatternGroup">
														<xs:annotation>
															<xs:documentation>An explicit pattern group that defines patterns recognized in the lexical state.</xs:documentation>
														</xs:annotation>																	
													</xs:element>
													<xs:element name="RegexPatternGroup" type="RegexPatternGroup">
														<xs:annotation>
															<xs:documentation>A regular expression pattern group that defines patterns recognized in the lexical state.</xs:documentation>
														</xs:annotation>																	
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="ChildStates" minOccurs="0">
											<xs:annotation>
												<xs:documentation>A set of child lexical states that can be entered from this lexical state if their start scope is recognized.</xs:documentation>
											</xs:annotation>																	
											<xs:complexType>
												<xs:choice maxOccurs="unbounded">
													<xs:element name="ChildState">
														<xs:annotation>
															<xs:documentation>A child lexical state that can be entered from this lexical state if its start scope is recognized.</xs:documentation>
														</xs:annotation>																	
														<xs:complexType>
															<xs:attribute name="Key" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="ID" type="xs:string" use="optional" />
									<xs:attribute name="TokenKey" type="xs:string" use="optional" />
									<xs:attribute name="TokenID" type="xs:string" use="optional" />
									<xs:attribute name="Style" type="xs:string" use="optional" />
									<xs:attribute name="Filename" type="xs:string" use="optional" />
									<xs:attribute name="ChildLanguageBackColor" type="xs:string" use="optional" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="ExampleText" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Example language code that can be used for testing lexical parsing.</xs:documentation>
					</xs:annotation>																	
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Key" type="xs:string" use="required" />
			<xs:attribute name="LanguageDefinitionVersion" type="xs:string" use="required" />
			<xs:attribute name="Secure" type="Boolean" use="required" />
			<xs:attribute name="WordContainsAdditionalCharacters" type="xs:string" use="optional" />
			<xs:attribute name="WordStandaloneCharacters" type="xs:string" use="optional" />
			<xs:attribute name="SyntaxLanguageTypeName" type="xs:string" use="optional" />
			<xs:attribute name="StateIDTypeName" type="xs:string" use="optional" />
			<xs:attribute name="TokenIDTypeName" type="xs:string" use="optional" />
		</xs:complexType>
	</xs:element>
	<!-- -->
</xs:schema>